HarmonyOS-鸿蒙app开发 —基于java_流转_HarmonyOS端发起多端协同_多端协同常见问题

HarmonyOS-鸿蒙app开发 —基于java_流转_HarmonyOS端发起多端协同_多端协同常见问题

注册流转任务管理服务成功后,无法推荐设备或选择设备列表接口未返回任何设备

现象描述

注册流转任务管理服务成功后,无对应的推荐设备。调用选择设备列表接口,未返回任何设备。

可能原因

设备过滤条件不对,将设备过滤掉了。

解决办法

检查设备过滤条件,具体过滤条件参数说明,可以参考开发指导接口说明中ExtraParams说明

在选择设备列表选择设备,并调用更新设备连接状态的接口后,列表中设备连接状态没有刷新

现象描述

在选择设备列表选择设备,并调用更新设备连接状态的接口后,列表中设备连接状态没有刷新。

可能原因

没有在UI主线程中调用更新设备连接状态的接口,导致界面内容不刷新。

解决办法

检查是否在UI主线程中调用更新设备连接状态接口。

设备不支持流转任务管理服务时如何实现多端协同

这种情况下实现多端协同时,需要在Intent中指定对端设备的deviceId。开发者可通过设备管理类DeviceManager提供的getTrustedDeviceList接口,获取指定条件下匿名化处理的设备列表。getTrustedDeviceList可参考ohos.distributedhardware.devicemanager.DeviceManager的API描述。

之后,开发者需要自行实现流转任务管理,即设备选择、流转状态管理等。

操作步骤如下。

在对应的config.json文件中,声明获取设备列表及设备信息的权限。

{

“reqPermissions”: [

{

“name”: “ohos.permission.DISTRIBUTED_DATASYNC”,

“reason”: “need”,

“usedScene”: {

“ability”: [

“MainAbility”

],

“when”: “inuse”

}

},

{

“name”: “com.huawei.permission.ACCESS_SERVICE_DM”,

“reason”: “need”,

“usedScene”: {

“ability”: [

“MainAbility”

],

“when”: “inuse”

}

}

]

}

通过getTrustedDeviceList接口获取设备列表,用于指定目标设备。

// 设备列表按最近使用排序

int MOST_RECENTLY_USED = 0;

// 获取设备管理类

ohos.distributedhardware.devicemanager.DeviceManager devManager;

 

// ISelectResult是一个自定义接口,用来处理指定设备deviceId后执行的行为

interface ISelectResult {

void onSelectResult(String deviceId);

}

 

@Override

public void onStart(Intent intent) {

….

// 调用DeviceManager的getTrustedDeviceList接口获取在线设备列表

ohos.distributedhardware.devicemanager.DeviceManager.createInstance(new ohos.distributedhardware.devicemanager.DeviceManager.DeviceManagerCallback() {

@Override

public void onGet(ohos.distributedhardware.devicemanager.DeviceManager deviceManager) {

devManager = deviceManager;

}

 

@Override

public void onDied() {

HiLog.info(LABEL_LOG, “DeviceManager onDied call.”);

}

});

}

 

// 获取设备列表,开发者可在获取的在线设备列表中选择目标设备执行操作

private void scheduleRemoteAbility(ISelectResult listener) {

Map<String, Object> filter = new HashMap<>();

filter.put(ohos.distributedhardware.devicemanager.DeviceManager.TARGET_PACKAGE_NAME, BUNDLE_NAME);

filter.put(ohos.distributedhardware.devicemanager.DeviceManager.SORT_TYPE, MOST_RECENTLY_USED);

if (devManager ==null) {

HiLog.info(LABEL_LOG, “scheduleRemoteAbility devManager is null”);

return;

}

List<DeviceInfo> onlineDevices = devManager.getTrustedDeviceList(BUNDLE_NAME, filter);

// 判断组网设备是否为空

if (onlineDevices.isEmpty()) {

listener.onSelectResult(null);

return;

}

int numDevices = onlineDevices.size();

List<String> deviceIds = new ArrayList<>(numDevices);

onlineDevices.forEach((device) -> {

deviceIds.add(device.getNetworkId());

});

// 以选择首个设备作为目标设备为例

// 开发者也可按照具体场景,通过其它方式进行设备选择

String selectedDeviceId = deviceIds.get(0);

listener.onSelectResult(selectedDeviceId);

}

通过点击事件实现连接,利用连接关系控制PA以及断开连接等行为。

// 连接远程PA

private ClickedListener mConnectRemotePAListener = new ClickedListener() {

@Override

public void onClick(Component arg0) {

scheduleRemoteAbility(new ISelectResult() {

@Override

void onSelectResult(String deviceId) {

if (deviceId != null) {

Intent connectPAIntent = new Intent();

// bundleName和abilityName与待连接的PA一一对应

// 例如:bundleName = “com.helloworld”

// abilityName = “com.helloworld.SampleParticleAbility”

Operation operation = new Intent.OperationBuilder()

.withDeviceId(deviceId)

.withBundleName(bundleName)

.withAbilityName(abilityName)

.withFlags(Intent.FLAG_ABILITYSLICE_MULTI_DEVICE)

.build();

connectPAIntent.setOperation(operation);

connectAbility(connectPAIntent, mConn);

}

}

});

}

};

0 0 投票数
文章评分
订阅评论
提醒
0 评论
最旧
最新 最多投票
内联反馈
查看所有评论
0
希望看到您的想法,请您发表评论x